package encheres.dao;

import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;

import encheres.dao.entities.Client;
import encheres.dao.entities.Produit;

/**
 * Offre les méthodes pour manipuler en base de données les objets de type Produit.
 * @author Nicolas
 *
 */
public interface IProduitDAO {

	/**
	 * Ajoute un produit en base de données.
	 * @param produit Le nouveau produit à ajouter.
	 * @throws HibernateException Erreur lor de la sauvegarde en BD du produit.
	 */
	public void proposerProduit(final Produit produit) throws HibernateException;
	
	/**
	 * Liste tous les produits présents en BD.
	 * @return La liste des produits présents en base ou null.
	 * @throws HibernateException Erreur lors du chargement de la liste par hibernate.
	 */
	public List<Produit> listProduits() throws HibernateException;
	
	/**
	 * Ajoute une enchère au produit.
	 * @param client Le client qui enchérit le produit produit.
	 * @param produit Le produit qui fait l'objet de l'enchère.
	 * @param newPrix Le prix annoncé par le client.
	 * @param date La date de l'enchère.
	 * @throws HibernateException Erreur lors de l'enregistrement d'un tuple vente.
	 */
	public void encherirProduit(final Client client, final Produit produit, final float newPrix, final Date date)throws HibernateException;
	
	/**
	 * Cherche un produit d'après sa clé primaire.
	 * @param idProduit L'identifiant du produit.
	 * @return Le produit s'il a été trouvé sinon null.
	 * @throws HibernateException Erreur lors du chargement du produit.
	 */
	public Produit findProduit(final int idProduit) throws HibernateException;
}
